﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Gestion
{
    // Modos de Operación
    public enum ModosOper : byte
    {
        Alta = 1,
        Baja = 2,
        Modificacion = 3,
        Consulta = 4
    }

    class clsComun
    {
        // Cadena de Conexión a la base de datos
        private static string cadenaConexionBD;


        // Comprobar que la tecla pulsada es válida para un campo que solo contiene Números
        public static void TeclaNumero(System.Object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            // Si es un número, o una tecla de control (retroceso)
            if (Char.IsDigit(e.KeyChar) | Char.IsControl(e.KeyChar))
            {
                // No bloqueo la tecla pulsada
                e.Handled = false;
            }
            else
            {
                // Si bloqueo la tecla pulsada
                e.Handled = true;
            }
        }

        // Comprobar que la tecla pulsada es válida para un campo que solo contiene Letras y Números
        public static void TeclaLetraNumero(System.Object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            // Si es una letra, un número, o una tecla de control (retroceso)
            if (Char.IsLetterOrDigit(e.KeyChar) | Char.IsControl(e.KeyChar))
            {
                // No bloqueo la tecla pulsada
                e.Handled = false;
            }
            else
            {
                // Si bloqueo la tecla pulsada
                e.Handled = true;
            }
        }

        // Comprobar que la tecla pulsada es válida para un campo de tipo Importe
        public static void TeclaImporte(System.Object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            // Almacenar en una variable el control que ha lanzado el evento
            // Sabemos que es de tipo TextBox, así podremos acceder a sus propiedades
            TextBox campoTxt = (TextBox)sender;

            // Si es un número, o una tecla de control (retroceso), o es una coma y no tenía ninguna
            if (Char.IsDigit(e.KeyChar) | 
                Char.IsControl(e.KeyChar) | 
                (e.KeyChar == ',' & campoTxt.Text.IndexOf(",") == -1))
            {
                // No bloqueo la tecla pulsada
                e.Handled = false;
            }
            else
            {
                // Si bloqueo la tecla pulsada
                e.Handled = true;
            }
        }

        // Validar el Importe y darle formato para que se visualice como un Importe
        public static void ImporteValidar(System.Object sender, int iLargo)
        {
            // Almacenar en una variable el control que ha lanzado el evento
            // Sabemos que es de tipo TextBox, así podremos acceder a sus propiedades
            TextBox campoTxt = (TextBox)sender;

            Decimal valorMax;

            try
            {
                // Calculo el valor máximo en función de su longitud
                valorMax = 10 ^ iLargo;

                if (campoTxt.Text.Equals("") || 
                    campoTxt.Text.Equals(",") || 
                    Convert.ToDecimal(campoTxt.Text) < valorMax)
                {
                    // El campo está informado y no supera el valor máximo
                    campoTxt.Text = ImporteFormato(campoTxt.Text);
                }
                else
                {
                    // El campo está informado y su valor supera el valor máximo
                    MessageBox.Show("El valor introducido excede el tamaño máximo.",
                                    "Error",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);

                    // Se sitúa el foco en el campo
                    campoTxt.Focus();
                }
            }
            catch (InvalidCastException ex)
            {
                MessageBox.Show("Error de conversión en dato no numérico." + "\r" + ex.Message);
            }
        }

        // Dar formato a una cadena para que se visualice como un Importe
        public static string ImporteFormato(string sImporte)
        {
            if (sImporte.Equals("") | sImporte.Equals(","))
            {
                sImporte = "";
            }
            else
            {
                sImporte = string.Format("{0:0,0.00}", Convert.ToDecimal(sImporte));
                //sImporte = string.Format("#,##0.00", Convert.ToDecimal(sImporte));
            }

            return sImporte;
        }

        // Quitar formato al campo Importe
        public static void ImporteFormatoQuitar(System.Object sender)
        {
            // Almacenar en una variable el control que ha lanzado el evento
            // Sabemos que es de tipo TextBox, así podremos acceder a sus propiedades
            TextBox campoTxt = (TextBox)sender;

            // Si el campo no está vacío
            if (!campoTxt.Text.Equals(""))
            {
                // Se pasa a numérico para quitar el formato
                campoTxt.Text = Convert.ToString(Convert.ToDecimal(campoTxt.Text));
            }
        }

        // Convierte una fecha en una cadena con formato 'yyyy-mm-dd', que será el utilizado en SQL
        public static string FechaSQL(DateTime fecha)
        {
            string cadena;

            cadena = fecha.Year.ToString() + "-" + 
                     fecha.Month.ToString() + "-" + 
                     fecha.Day.ToString();

            return cadena;
        }

        // Convierte una cadena que contiene un Importe al formato que será utilizado en SQL (solo punto decimal)
        public static string ImporteSQL(String sImporte)
        {
            // Quitar el punto de millar
            sImporte = sImporte.Replace(".", "");

            // Cambiar la coma decimal por un punto
            sImporte = sImporte.Replace(",", ".");

            return sImporte;
        }
        
        public static void setCadenaConexionBD()
        {
            cadenaConexionBD = "Server=localhost;Database=gestion_db;Uid=root;Pwd=toor;";
        }

        public static string getCadenaConexionBD()
        {
            return cadenaConexionBD;
        }
    }
}
